﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Configuration;

namespace ivvExportacao
{
    public class IVV
    {
        public double quantidadeResgistrosResid_d;
        public double quantidadeResgistrosComerc_d;

        //LISTAS PARA VINCULAR O EMPREENDIMENTO COM O TIPO DE UNIDADE DO EMPREENDIMENTO UM PARA CADA TIPO DE
        //TABELA DO BANCO DE DADOS ANTIGO NÃO SOBRECARREGANDO O SISTEMA EVITANDO O ESTOURO DE PILHA
        //public List<string> codigoTipoUnidadeEmpreendimentoResid_d = new List<string>();
        //public List<string> codigoTipoUnidadeEmpreendimentoComerc_d = new List<string>();
        public List<string> codigoEmpreendimentoResid_d = new List<string>();
        public List<string> codigoEmpreendimentoComerc_d = new List<string>();

        public void load()
        {
            quantidadeResgistrosResid_d = quantidadeResgistrosPegarResid_d();
            quantidadeResgistrosComerc_d = quantidadeResgistrosPegarComerc_d();


            SqlConnection conexaoNovaCodigoSincronizar = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
            conexaoNovaCodigoSincronizar.Open();

            string selectNova = "select top " + quantidadeResgistrosResid_d + " * from empreendimento where exportacao = 1 order by codigoEmpreendimento";

            SqlCommand cmdNova = new SqlCommand(selectNova, conexaoNovaCodigoSincronizar);
            SqlDataReader drNova = cmdNova.ExecuteReader();

            if (drNova.HasRows)
            {
                while (drNova.Read())
                {
                    //codigoTipoUnidadeEmpreendimentoResid_d.Add(drNova["codigoTipoUnidadeEmpreendimento"].ToString());
                    codigoEmpreendimentoResid_d.Add(drNova["codigoEmpreendimento"].ToString());
                }
            }

            drNova.Close();

            selectNova = "select top " + quantidadeResgistrosComerc_d + " * from empreendimento where exportacao = 0 order by codigoEmpreendimento";

            cmdNova = new SqlCommand(selectNova, conexaoNovaCodigoSincronizar);
            drNova = cmdNova.ExecuteReader();

            if (drNova.HasRows)
            {
                while (drNova.Read())
                {
                    //codigoTipoUnidadeEmpreendimentoComerc_d.Add(drNova["codigoTipoUnidadeEmpreendimento"].ToString());
                    codigoEmpreendimentoComerc_d.Add(drNova["codigoEmpreendimento"].ToString());
                }
            }

            drNova.Close();

            conexaoNovaCodigoSincronizar.Close();
        }

        public double quantidadeResgistrosPegarResid_d()
        {
            SqlConnection conexaoAntigaQTD = new SqlConnection(ConfigurationManager.AppSettings["baseDadosAntiga"]);
            conexaoAntigaQTD.Open();
            SqlConnection conexaoNovaQTD = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
            conexaoNovaQTD.Open();

            double quantNova = 0, quantAntiga = 0;

            string selectQuantAntiga = "select count(*) as quant from resid_d";

            SqlCommand cmdAntiga = new SqlCommand(selectQuantAntiga, conexaoAntigaQTD);
            SqlDataReader drAntiga = cmdAntiga.ExecuteReader();

            if (drAntiga.HasRows)
            {
                drAntiga.Read();
                quantAntiga = Convert.ToDouble(drAntiga["quant"].ToString());
            }
            drAntiga.Close();

            string selectQuantNova = "select count(*) as quant from ivv where exportacao = 1";
            SqlCommand cmdNova = new SqlCommand(selectQuantNova, conexaoNovaQTD);
            SqlDataReader drNova = cmdNova.ExecuteReader();

            if (drNova.HasRows)
            {
                drNova.Read();
                quantNova = Convert.ToDouble(drNova["quant"].ToString());
            }

            conexaoAntigaQTD.Close();
            conexaoNovaQTD.Close();

            return quantAntiga - quantNova;
        }

        public string transferirIVVResid_d()
        {
            try
            {
                SqlConnection conexaoAntiga = new SqlConnection(ConfigurationManager.AppSettings["baseDadosAntiga"]);
                conexaoAntiga.Open();
                SqlConnection conexaoNova = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNova.Open();
                SqlConnection conexaoNovaInsert = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNovaInsert.Open();

                //string selectAntiga = "select top " + quantidadeResgistrosResid_d + " (select razao from empresa where empresa.codigo = resid_d.cod_empresa) as empresa, ";
                //selectAntiga += "resid_d.* from resid_d order by ANO_MES desc ";

                string selectAntiga = "select top " + quantidadeResgistrosResid_d + " (select razao from empresa where empresa.codigo = resid_d.cod_empresa) as empresa, ";
                selectAntiga += "(select descricao from estagio_da_obra where estagio_da_obra.codigo = resid_d.cod_estag_obra) as estagio_da_obra, ";
                selectAntiga += "(select coditem from item where item.coditem = resid_d.item) as coditem, ";
                selectAntiga += "(select descricao from item where item.coditem = resid_d.item) as item, (select nome from bairros where bairros.codigo = resid_d.cod_bairro) as bairros, ";
                selectAntiga += "resid_d.* from resid_d order by ANO_MES desc ";

                SqlCommand cmdAntiga = new SqlCommand(selectAntiga, conexaoAntiga);
                SqlDataReader drAntiga = cmdAntiga.ExecuteReader();

                int contador = 0;

                if (drAntiga.HasRows)
                {
                    while (drAntiga.Read())
                    {
                        string ano = drAntiga["ANO_MES"].ToString().Substring(0, 4);
                        string mes = drAntiga["ANO_MES"].ToString().Substring(4, 2);
                        string item = drAntiga["coditem"].ToString();

                        //SELECT PARA RECUPERAR O CÓDIGO DA INCORPORADORA COM BASE NO NOME QUE É A ÚNICA CHAVE
                        //QUE PODE SER COMPARADA

                        //OBS: ESSE SELECT TRAZ APENAS UMA LINHA COM DADOS CONTENDO UM CAMPO CODIGOINCORPORADORA
                        //string selectNova = "select top 1 (select codigoIncorporadora from incorporadora where incorporadora.razaoSocialIncorporadora = '" + drAntiga["empresa"].ToString() + "') as codigoIncorporadora  ";
                        //selectNova += "from incorporadora ";

                        string selectNova = "select top 1 (select codigoIncorporadora from incorporadora where incorporadora.razaoSocialIncorporadora = '" + drAntiga["empresa"].ToString() + "') as codigoIncorporadora, ";
                        selectNova += "(select codigoEstagioObra from estagioObra where estagioObra.descricaoEstagioObra = '" + drAntiga["estagio_da_obra"].ToString() + "') as codigoEstagioObra, ";
                        selectNova += "(select codigoSituacaoImovel from situacaoImovel where situacaoImovel.descricaoSituacaoImovel = '" + drAntiga["item"].ToString() + "') as codigoSituacaoImovel,  ";
                        selectNova += "(select codigoBairro from bairro where bairro.descricaoBairro = '" + drAntiga["bairros"].ToString() + "') as codigoBairro  ";
                        selectNova += "from incorporadora ";

                        SqlCommand cmdNova = new SqlCommand(selectNova, conexaoNova);
                        SqlDataReader drNova = cmdNova.ExecuteReader();

                        if (drNova.HasRows)
                        {
                            drNova.Read();

                            string insertIVV = "insert into ivv ";
                            insertIVV += "(anoIvv , mesIvv , codigoIncorporadora, codigoEmpreendimento, ";
                            insertIVV += "tipoTransporte, exportacao, ";
                            insertIVV += "codigoSituacaoImovel , codigoEstagioObra, valorMedioMetroQuadrado, ";

                            switch (item)
                            {
                                case "11":
                                    insertIVV += "quantidadeOfertasIvv) ";
                                    break;
                                case "12":
                                    insertIVV += "quantidadeLancamentoIvv) ";
                                    break;
                                case "21":
                                    insertIVV += "quantidadeVendaIvv) ";
                                    break;
                                default://22
                                    insertIVV += "quantidadeLancamentoVendaIvv) ";
                                    break;
                            }

                            insertIVV += "values (";
                            insertIVV += "'" + ano + "', '" + mes + "', " + drNova["codigoIncorporadora"].ToString() + ", ";
                            //insertIVV += "" + codigoEmpreendimentoResid_d[contador] + ", ";
                            insertIVV += "" + empreendimento(drAntiga["area"].ToString(), drNova["codigoIncorporadora"].ToString(), drNova["codigoBairro"].ToString()) + ", ";
                            insertIVV += " 1, 1, " + drNova["codigoSituacaoImovel"].ToString() + ", " + drNova["codigoEstagioObra"].ToString() + ", '" + drAntiga["valor_m2"].ToString() + "', ";
                            insertIVV += " '" + drAntiga["quantidade"].ToString() + "')";

                            SqlCommand cmdInsertIVV = new SqlCommand(insertIVV, conexaoNovaInsert);
                            cmdInsertIVV.ExecuteNonQuery();

                            contador++;
                        }

                        drNova.Close();
                    }
                }

                drAntiga.Close();

                conexaoAntiga.Close();
                conexaoNova.Close();
                conexaoNovaInsert.Close();

                return "<span style=\"color:Green\">" + quantidadeResgistrosResid_d + " registros dos ivvs residenciais transferidos com sucesso.</span>";
            }
            catch
            {
                return "<span style=\"color:Red\">Falha ao transferir os dados dos ivvs residenciais.</span>";
            }//ai ela me perguntou sobre uma menina que era da igreja que eu fazia parte
        }

        public double quantidadeResgistrosPegarComerc_d()
        {
            SqlConnection conexaoAntigaQTD = new SqlConnection(ConfigurationManager.AppSettings["baseDadosAntiga"]);
            conexaoAntigaQTD.Open();
            SqlConnection conexaoNovaQTD = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
            conexaoNovaQTD.Open();

            double quantNova = 0, quantAntiga = 0;

            string selectQuantAntiga = "select count(*) as quant from Comerc_d";

            SqlCommand cmdAntiga = new SqlCommand(selectQuantAntiga, conexaoAntigaQTD);
            SqlDataReader drAntiga = cmdAntiga.ExecuteReader();

            if (drAntiga.HasRows)
            {
                drAntiga.Read();
                quantAntiga = Convert.ToDouble(drAntiga["quant"].ToString());
            }
            drAntiga.Close();

            string selectQuantNova = "select count(*) as quant from ivv where exportacao = 0";
            SqlCommand cmdNova = new SqlCommand(selectQuantNova, conexaoNovaQTD);
            SqlDataReader drNova = cmdNova.ExecuteReader();

            if (drNova.HasRows)
            {
                drNova.Read();
                quantNova = Convert.ToDouble(drNova["quant"].ToString());
            }

            conexaoAntigaQTD.Close();
            conexaoNovaQTD.Close();

            return quantAntiga - quantNova;
        }

        public string transferirIVVComerc_d()
        {
            try
            {
                SqlConnection conexaoAntiga = new SqlConnection(ConfigurationManager.AppSettings["baseDadosAntiga"]);
                conexaoAntiga.Open();
                SqlConnection conexaoNova = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNova.Open();
                SqlConnection conexaoNovaInsert = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNovaInsert.Open();

                //string selectAntiga = "select top " + quantidadeResgistrosComerc_d + " (select razao from empresa where empresa.codigo = Comerc_d.cod_empresa) as empresa, ";
                //selectAntiga += "Comerc_d.* from Comerc_d order by ANO_MES desc ";

                string selectAntiga = "select top " + quantidadeResgistrosComerc_d + " (select razao from empresa where empresa.codigo = Comerc_d.cod_empresa) as empresa, ";
                selectAntiga += "(select coditem from item where item.coditem = Comerc_d.item) as coditem, ";
                selectAntiga += "(select descricao from item where item.coditem = Comerc_d.item) as item, (select nome from bairros where bairros.codigo = Comerc_d.cod_bairro) as bairros, ";
                selectAntiga += "Comerc_d.* from Comerc_d order by ANO_MES desc ";

                SqlCommand cmdAntiga = new SqlCommand(selectAntiga, conexaoAntiga);
                SqlDataReader drAntiga = cmdAntiga.ExecuteReader();

                int contador = 0;

                if (drAntiga.HasRows)
                {
                    while (drAntiga.Read())
                    {
                        string ano = drAntiga["ANO_MES"].ToString().Substring(0, 4);
                        string mes = drAntiga["ANO_MES"].ToString().Substring(4, 2);
                        string item = drAntiga["coditem"].ToString();

                        //SELECT PARA RECUPERAR O CÓDIGO DA INCORPORADORA E DO CODIGOSITUACAOIMOVEL COM BASE NO NOME QUE É A ÚNICA CHAVE
                        //QUE PODE SER COMPARADA

                        //OBS: ESSE SELECT TRAZ APENAS UMA LINHA COM DADOS CONTENDO DOIS CAMPOS CODIGOINCORPORADORA E CODIGOSITUACAOIMOVEL
                        //string selectNova = "select top 1 (select codigoIncorporadora from incorporadora where incorporadora.razaoSocialIncorporadora = '" + drAntiga["empresa"].ToString() + "') as codigoIncorporadora  ";
                        //selectNova += "from incorporadora ";


                        string selectNova = "select top 1 (select codigoIncorporadora from incorporadora where incorporadora.razaoSocialIncorporadora = '" + drAntiga["empresa"].ToString() + "') as codigoIncorporadora, ";
                        selectNova += "(select codigoSituacaoImovel from situacaoImovel where situacaoImovel.descricaoSituacaoImovel = '" + drAntiga["item"].ToString() + "') as codigoSituacaoImovel,  ";
                        selectNova += "(select codigoBairro from bairro where bairro.descricaoBairro = '" + drAntiga["bairros"].ToString() + "') as codigoBairro  ";
                        selectNova += "from incorporadora ";

                        SqlCommand cmdNova = new SqlCommand(selectNova, conexaoNova);
                        SqlDataReader drNova = cmdNova.ExecuteReader();

                        if (drNova.HasRows)
                        {
                            drNova.Read();

                            //string insertIVV = "insert into ivv ";
                            //insertIVV += "(anoIvv , mesIvv , codigoIncorporadora, codigoEmpreendimento ";
                            //insertIVV += ", codigoTipoUnidadeEmpreendimento , quantidadeVendaIvv ";
                            //insertIVV += ", tipoTransporte, exportacao)";
                            //insertIVV += "values (";
                            //insertIVV += "'" + ano + "', '" + mes + "', " + drNova["codigoIncorporadora"].ToString() + ", ";
                            //insertIVV += "" + codigoEmpreendimentoComerc_d[contador] + ", " + codigoTipoUnidadeEmpreendimentoComerc_d[contador] + ", ";
                            //insertIVV += "'" + drAntiga["quantidade"].ToString() + "', 0, 0)";

                            string insertIVV = "insert into ivv ";
                            insertIVV += "(anoIvv , mesIvv , codigoIncorporadora, codigoEmpreendimento, ";
                            insertIVV += "tipoTransporte, exportacao, ";
                            insertIVV += "codigoSituacaoImovel , codigoEstagioObra, ";

                            switch (item)
                            {
                                case "11":
                                    insertIVV += "quantidadeOfertasIvv) ";
                                    break;
                                case "12":
                                    insertIVV += "quantidadeLancamentoIvv) ";
                                    break;
                                case "21":
                                    insertIVV += "quantidadeVendaIvv) ";
                                    break;
                                default://22
                                    insertIVV += "quantidadeLancamentoVendaIvv) ";
                                    break;
                            }


                            insertIVV += "values (";
                            insertIVV += "'" + ano + "', '" + mes + "', " + drNova["codigoIncorporadora"].ToString() + ", ";
                            //insertIVV += "" + codigoEmpreendimentoComerc_d[contador] + ", ";
                            insertIVV += "" + empreendimento(drAntiga["area"].ToString(), drNova["codigoIncorporadora"].ToString(), drNova["codigoBairro"].ToString()) + ", ";
                            insertIVV += " 0, 0, " + drNova["codigoSituacaoImovel"].ToString() + ", 50, ";
                            insertIVV += " '" + drAntiga["quantidade"].ToString() + "')";

                            SqlCommand cmdInsertIVV = new SqlCommand(insertIVV, conexaoNovaInsert);
                            cmdInsertIVV.ExecuteNonQuery();

                            contador++;
                        }

                        drNova.Close();
                    }
                }

                drAntiga.Close();

                conexaoAntiga.Close();
                conexaoNova.Close();
                conexaoNovaInsert.Close();

                return "<span style=\"color:Green\">" + quantidadeResgistrosComerc_d + " registros dos ivvs comerciais transferidos com sucesso.</span>";
            }
            catch
            {
                return "<span style=\"color:Red\">Falha ao transferir os dados dos ivvs comerciais.</span>";
            }
        }

        public string empreendimento(string area, string codigoIncorporadora, string codigoBairro)
        {
            SqlConnection conexaoNova = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
            conexaoNova.Open();

            string selectValidar = "SELECT * FROM empreendimento where areaPrivada = '" + area + "' ";
            selectValidar += "and codigoIncorporadora = " + codigoIncorporadora + " and codigoBairro = " + codigoBairro;

            SqlCommand cmd = new SqlCommand(selectValidar, conexaoNova);
            SqlDataReader dr = cmd.ExecuteReader();

            string codigoEmpreendimento = "";

            if (dr.HasRows)
            {
                dr.Read();

                codigoEmpreendimento = dr["codigoEmpreendimento"].ToString();
            }

            dr.Close();

            conexaoNova.Close();

            return codigoEmpreendimento;
        }
    }
}
